-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weโll occasionally send you account related emails.
Already on GitHub? Sign in to your account
23-H0ngJu #227
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์ด ๋ฌธ์ ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ ์ ํ์์๋๋ฐ,
ํ์ด๊ฐ ๋ฐ๋ก ๋ ์ฌ๋ผ์ ์ฝ๋๋ฅผ ๋ค์ ์น์ง ์์์ต๋๋ค!!!
def solution(genres, plays):
dict = {}
dict_max = {}
answer = []
for genre in range(len(genres)):
if genres[genre] not in dict:
dict[genres[genre]] = [[genre,plays[genre]]]
else:
dict[genres[genre]].append([genre,plays[genre]])
for genre in dict:
tot =0
for j in dict[genre]:
tot += j[1]
dict_max[genre]=tot
dict[genre].sort(reverse=True, key=lambda x: x[1])
dict_max = sorted(list(dict_max.items()), reverse = True, key = lambda x:x[1])
for genre in dict_max:
count = 0
while dict[genre[0]]:
if len(dict[genre[0]])==0 or count ==2:
break
else:
answer.append(dict[genre[0]].pop(0)[0])
count +=1
return answer
ํด์์๋ค๊ฐ ์ ๋ ฌ์๋ค๊ฐ ๊ตฌํ์๋ค๊ฐ..
๋ฌธ์ ์์ฒด์ ๋์ด๋๋ ์ฌ์ด๋ฐ ์ฌ๋ฌ๊ฐ์ง๋ฅผ ์ํ๋ค์..!
์ฒ์์ ์ฐ์ตํ ๋ ์งฑ ์ข์ ๋ฌธ์ ์ธ๋ฏ..!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ํ์ด์ฌ์ด ํ์คํ ์ฝ๋์์ผ๋ก๋ ๊ฐ๋ฒผ์๋ณด์ด๋ ๊ฐ์ด ์๊ธดํ๊ตฐ์..
์ ๋ ์ด๊ฑฐ ํ์์ ๋ ์กฐ๊ธ ๊ณ ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ฅ๋ฅด๋ณ๋ก ์ธ๋ฑ์ค์ ๊ฐ์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ์ํ ํด์ map
๊ฐ๊ฐ์ ์ฅ๋ฅด๋ฅผ ์ค๋ณต์ด ํ์ฉ๋์ง ์๋ ์งํฉ์ ํตํด ๊ฐ ์ฅ๋ฅด๊ฐ ํ ๋ฒ์ฉ ์ ๊ทผํด์ฃผ๊ธฐ ์ํ set
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ ์ ๋ ฌ์ ์ํ ์ฐ์ ์์ ํ๋ฅผ ํ์ฉํด์ ํ์์ต๋๋ค..
#include <string>
#include <vector>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <iostream>
using namespace std;
struct cmp{
bool operator()(const pair<int, int>& a, const pair<int, int>& b)
{
if(a.first == b.first) return a.second > b.second;
return a.first < b.first;
}
};
vector<int> solution(vector<string> genres, vector<int> plays) {
vector<int> answer;
unordered_map<string, int> album_data;
unordered_map<string, priority_queue<pair<int, int>, vector<pair<int, int>>, cmp>> album_index;
unordered_set<string> genre_data;
priority_queue<pair<int, string>> pq;
for(int i = 0; i < genres.size(); i++)
{
string genre = genres[i];
int play = plays[i];
album_data[genre] += play;
album_index[genre].push({play, i});
genre_data.insert(genre);
}
for(unordered_set<string>::const_iterator it = genre_data.begin(); it != genre_data.end(); ++it)
{
pq.push({album_data[*it], *it});
}
while(!pq.empty())
{
int cnt = 0;
string genre = pq.top().second;
while(cnt < 2 && !album_index[genre].empty())
{
answer.push_back(album_index[genre].top().second);
album_index[genre].pop();
cnt++;
}
pq.pop();
}
return answer;
}
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
์์ ์
- [์ฅ๋ฅด : <์ด ์ฌ์ ํ์, <์ฌ์ ํ์, ๊ณ ์ ๋ฒํธ> ๋ฆฌ์คํธ>] ๋์ ๋๋ฆฌ๋ฅผ ๋ง๋ค์ด์ ๊ธฐ๋ก
- ๋์ ๋๋ฆฌ์ <์ด ์ฌ์ ํ์, <์ฌ์ ํ์, ๊ณ ์ ๋ฒํธ> ๋ฆฌ์คํธ> Value ๋ฆฌ์คํธ๋ฅผ ์ถ์ถํด์ ์ด ์ฌ์ ํ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
- ์ถ์ถํ ๋ฆฌ์คํธ๋ฅผ ์ํํ๋ฉฐ <์ด ์ฌ์ ํ์, <์ฌ์ ํ์, ๊ณ ์ ๋ฒํธ> ๋ฆฌ์คํธ>์ <์ฌ์ ํ์, ๊ณ ์ ๋ฒํธ> ๋ฆฌ์คํธ๋ฅผ ์ฌ์ ํ์ ๋ด๋ฆผ์ฐจ์ -> ๊ณ ์ ๋ฒํธ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
- ์ ๋ ฌํ ๋ฆฌ์คํธ์์ 2๊ฐ์ฉ Id ์ถ์ถ
์์ผ๋ก ํ์์๋ค์... ๋ญ๊ฐ ๋ณต์กํฉ๋๋ค.
์ ์ฒด ์ฝ๋
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
vector<int> solution(vector<string> Genres, vector<int> Plays)
{
using FSongs = pair<int, vector<pair<int, int>>>;
unordered_map<string, FSongs> Albums;
for(int i = 0; i < Genres.size(); ++i)
{
auto& [TotalPlay, Songs] = Albums[Genres[i]];
TotalPlay += Plays[i];
Songs.emplace_back(Plays[i], i);
}
vector<FSongs> SongsList(Albums.size());
transform(Albums.begin(), Albums.end(), SongsList.begin(),
[](auto const& Album)
{
return Album.second;
});
sort(SongsList.begin(), SongsList.end(), greater<>()); // TotalPlay ๋ด๋ฆผ์ฐจ์
vector<int> Answer;
for(auto& [TotalPlay, Songs] : SongsList)
{
sort(Songs.begin(), Songs.end(), [](auto const& Lhs, auto const& Rhs)
{
return Lhs.first == Rhs.first ? Lhs.second < Rhs.second : Lhs.first > Rhs.first;
});
int Count = 0;
for(const auto& [Play, Id] : Songs)
{
if(Count == 2) break;
Answer.emplace_back(Id);
Count++;
}
}
return Answer;
}
์ด๋ฒ์ ๋ค์ ํ์ด๋ดค๋๋ฐ,
- [์ฅ๋ฅด, ์ฌ์ ํ์, ๊ณ ์ ๋ฒํธ]๋ฅผ ๊ฐ์ง๋
FAlbum
ํด๋์ค ์์ฑ. ์ฌ์ ํ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋๊ฒ ์ค์ - [์ฅ๋ฅด : ์ด ์ฌ์ ํ์] ๋์ ๋๋ฆฌ, FAlbum ๋ฆฌ์คํธ 2๊ฐ๋ฅผ ๋ง๋ค์ด ๊ฐ๊ฐ ๊ธฐ๋ก
- [์ฅ๋ฅด : ์ด ์ฌ์ ํ์] ๋์ ๋๋ฆฌ๋ฅผ ๋ฆฌ์คํธ๋ก ๋ณํ, ์ด ์ฌ์ ํ์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
- FAlbum ๋ฆฌ์คํธ๋ฅผ ๋ด๋ฆผ์ฐจ์(์ฌ์ ํ์ ๊ธฐ์ค) ์ ๋ ฌ
- ์ ๋ ฌ๋ ์ฅ๋ฅด ๋ณ ์ด ์ฌ์ํ์ ๋ฆฌ์คํธ์ FAlbum ๋ฆฌ์คํธ๋ฅผ ์ํํด ๊ฐ ์ฅ๋ฅด ๋ณ ๋ ธ๋ ๊ณ ์ ๋ฒํธ 2๊ฐ์ฉ ์ ์ฅ
์์ผ๋ก๋ ํ๋ฆฌ๋ค์. ์กฐ๊ธ? ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง ๊ฒ ๊ฐ๊ธฐ๋ ํ๊ตฌ์...
์ ์ฒด ์ฝ๋
#include <string>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
struct FAlbum
{
string Genre;
int Play;
int Id;
FAlbum(string InGenre, int InPlay, int InId)
: Genre(std::move(InGenre))
, Play(InPlay)
, Id(InId)
{}
bool operator<(const FAlbum& Other) const
{
return Play < Other.Play;
}
bool operator<=(const FAlbum& Other) const
{
return Play <= Other.Play;
}
bool operator>(const FAlbum& Other) const
{
return Play > Other.Play;
}
bool operator>=(const FAlbum& Other) const
{
return Play >= Other.Play;
}
bool operator==(const FAlbum& Other) const
{
return Play == Other.Play;
}
bool operator!=(const FAlbum& Other) const
{
return Play != Other.Play;
}
};
vector<int> solution(vector<string> Genres, vector<int> Plays)
{
vector<FAlbum> Albums;
unordered_map<string, int> PlaysbyGenre;
for(int i = 0; i < Genres.size(); ++i)
{
PlaysbyGenre[Genres[i]] += Plays[i];
Albums.emplace_back(Genres[i], Plays[i], i);
}
vector<pair<string, int>> PlaysbyGenreList(PlaysbyGenre.begin(), PlaysbyGenre.end());
sort(PlaysbyGenreList.begin(), PlaysbyGenreList.end(),
[](auto const& Lhs, auto const& Rhs)
{
return Lhs.second > Rhs.second;
});
sort(Albums.begin(), Albums.end(), greater<>());
vector<int> Answer;
for(const auto& [Genre, Play] : PlaysbyGenreList)
{
int Count = 0;
for(const auto& Album : Albums)
{
if(Genre == Album.Genre)
{
Count++;
Answer.emplace_back(Album.Id);
}
if(Count == 2)
{
break;
}
}
}
return Answer;
}
๐ ๋ฌธ์ ๋งํฌ
๋ฒ ์คํธ์จ๋ฒ
โ๏ธ ์์๋ ์๊ฐ
45M
โจ ์๋ ์ฝ๋
๋ฌธ์ ์์ฝ
์ฌ์์๊ฐ ๊ฐ์ฅ ๋ง์ ์ฅ๋ฅด 2๊ฐ๋ฅผ ๊ณจ๋ผ, ๊ฐ๊ฐ์ ์ฅ๋ฅด์์ 2๊ฐ์ฉ ์ ํํ์ฌ ๋ฒ ์คํธ ์จ๋ฒ์ ๋ง๋ค์ด๋ผ@!
์ ๋ฒ ๋ฌธ์ ์ ์ด์ ํด์ ๋ฌธ์ ์ ๋๋ค.
๋ฌธ์ ์์ ์๊ตฌํ๋๋๋ก ์ฐจ๊ทผ์ฐจ๊ทผ ํ๋ฉด ํฐ ์ด๋ ค์ ์์ด ํ ์ ์์ด์
์ผ๋จ ๊ฐ์ฅ ๋จผ์ ์์์ผ ํ ์ ๋ณด๋ ์ด ์ฌ์ ์๊ฐ ๋ง์ ์ฅ๋ฅด 2๊ฐ์ ๋๋ค.
๋ฐ๋ผ์ ๋จผ์ ,
(์ธ๋ฑ์ค, ์ฅ๋ฅด)๋ฅผ ์๋ ค์ค ๋์ ๋๋ฆฌ์ธ info๋ฅผ ํ๋ ์์ฑํ๊ณ ,
(์ฌ์์ ํฉ, ์ฅ๋ฅด)์ ์ ๋ณด๋ฅผ ๋ด์ ๋์ ๋๋ฆฌ dic์ ํ๋ ์์ฑํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์์ฑ๋ dic์์ value๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๋ฆฌ์คํธ best_g๋ฅผ ํ๋ ์์ฑํฉ๋๋ค.
๊ทธ๋ฌ๋ฉด best_g์๋ ์ฌ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ๋ (์ฅ๋ฅด, ์ฌ์์)๊ฐ ์ ์ฅ๋ฉ๋๋ค.
์ด์ , best_g์์ ํ๋์ฉ ์ฅ๋ฅด๋ช ์ ๊บผ๋ด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ์ฅ๋ฅด๋ช ์ ๋ํด์ genre(์ฒ์์ ์ฃผ์ด์ง input)์ ๋น๊ตํ๋ฉด์ ๊ฐ์ผ๋ฉด best_album์ ๋ด์ต๋๋ค.
์ด๋, ํด๋น ์ฅ๋ฅด ๋ด์์ ๋ค์ ์ฌ์ ์๊ฐ ๋ง์ 2๊ณก์ ๋ฝ์์ผ ํ๋ฏ๋ก,
๊ทธ๋ฅ ๋ฒ๋ธ ์ ๋ ฌ๋ก ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ค๋๋ค.
๊ทธ๋ฌ๊ณ ๋์ best_album์ 1,2๋ฒ์งธ ์์๋ง answer์ ์ถ๊ฐํด์ฃผ๋ฉด ๋์ด ๋ฉ๋๋ค.
์ฌ์ค ์ฒ์ ์ฝ๋์๋ ๊ฐ์ ์ฌ์์์ผ ๋๋ ์ธ๋ฑ์ค๊ฐ ์์ ๊ณก์ด ๋จผ์ ์ค๋๋ก ํ๋๋ฐ,,,
์ง๊ธ ๋ค์ ๋ณด๋๊น ํด๋น ์กฐ๊ฑด์ด ์๋ค์ ํใ ใ ;; ์ด ๋ฌธ์ ํ๊ธฐ ์ ์ ํผ ๋ฌธ์ ๋ ์งฌ๋ฝ๋๋ ๋ด ๋๋ฅ
๋ฌธ์ ๋ฅผ ์ซ ๋ ์ ๋๋ก ์ฝ์ด์ผ๊ฒ ์ต๋๋ค....ใ
๐ ์๋กญ๊ฒ ์๊ฒ๋ ๋ด์ฉ